package com.woniu.ly.facade;

import com.woniu.ly.model.common.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.sql.Timestamp;
import java.util.*;

@RequestMapping("manage")
@FeignClient(value = "manager",contextId = "ManageFeignClient")
public interface ManageFeignClient {
    /*
     * 新增导游
     * */
    @PostMapping("addGuide")
    public Result addGuide(String guideName);
    /*
     * 录入散客信息(证件号码、持证人姓名、有效期、证件类型、出行人电话、订单id)
     * */
    @PostMapping("addScatteredPassengers")
    public Result addScatteredPassengers(
            String cardNum, String cardHolder, Timestamp cardIndate, String cardType
            , String travelerTel
            , int orderId, int tourId, int cooperatorId, double cooperatorRatio);
    /*
     * 结束旅行团
     * */
    @PostMapping("finishTour")
    public Result finishTour(int guideId,int tourId);
    /*
     * 结束秒杀旅行团
     * */
    @PostMapping("finishSeckillTour")
    public Result finishSeckillTour(int guideId,int seckillTourId);
    /*
     * 用户订单详情表(条件查询)（正常/退款/已退款）
     * */
    @GetMapping("getUserOrderDetailStatus")
    public Result getUserOrderDetailStatus(@RequestParam(defaultValue = "1") int curr
            , @RequestParam(defaultValue = "5") int size
            , String userOrderDetailStatus);
    /*
     * 秒杀团选择导游
     * */
    @PostMapping("chooseSeckillGuide")
    public Result chooseSeckillGuide(int guideId,int seckilltourId);
    /*
     * 选择导游
     * */
    @PostMapping("chooseGuide")
    public Result chooseGuide(int guideId,int tourId);
    /*
     * 查看所有导游信息
     * */
    @GetMapping("getGuide")
    public Result getGuide(String guideStatus, String guideName
            , @RequestParam(defaultValue = "1") int currPage
            , @RequestParam(defaultValue = "5") int size);
    /*
     * 新增酒店（图片后续添加，营业时间）
     * */
    @GetMapping("addAdminHotel")
    public Result addAdminHotel(String hotelName
            , String hotelTel
            , String hotelAddress
            , double hotelLongitude
            , double hotelLatitude
            , MultipartFile hotelImgFile) throws IOException;
    /*
     * 审核（给与记录）
     * @Param operationContent (驳回/通过)
     * */
    @PutMapping("hotelAdminAudit")
    public Result hotelAdminAudit(int hotelId,String operationContent,String operationReason);
    /*
     * 下架酒店（给与记录）
     * */
    @PutMapping("hotelAdminOff")
    public Result hotelAdminOff(int hotelId,String operationReason);
    @PostMapping("addSpot")
    public Result addSpot(String spotName,double spotPrice,String spotContent,
                          double spotLongitude,double spotLatitude,String spotAddress);

    @GetMapping("getAllspotByName")
    public Result getAllspot(String spotName
            , @RequestParam(defaultValue = "1") int currPage
            , @RequestParam(defaultValue = "5") int size);

    @GetMapping("getSpotById")
    public Result getSpotById(int spotId);

    @PutMapping("modifySpotById")
    public Result modifySpotById(int spotId,double spotPrice,String spotContent);

    @PutMapping("closeSpotById")
    public Result closeSpotById(int spotId,String operationReason);

    @PostMapping("addHotelImg")
    public Result addHotelImg(int hotelId, List<MultipartFile> hotelImgFiles);

    @PostMapping("addSpotImg")
    public Result addSpotImg(int spotId,List<MultipartFile> spotImgFiles);
    /*
     * 上架酒店（给与记录）
     * */
    @PutMapping("hotelAdminOn")
    public Result hotelAdminOn(int hotelId,String operationReason);
    /*
     * 分页查询团信息（提供团id精确查找、团类型、产品id、团状态查询）
     * */
    @GetMapping("getTours")
    public Result getTours(@RequestParam(defaultValue = "1") int curr
            , @RequestParam(defaultValue = "5") int size
            , int tourId
            , String tourType
            , int productId
            , String tourStatus);
    /*
     * 秒杀分页查询团信息（提供团id精确查找、团类型、产品id、团状态查询）
     * */
    @GetMapping("getSeckillTours")
    public Result getSeckillTours(@RequestParam(defaultValue = "1") int curr
            , @RequestParam(defaultValue = "5") int size
            , int seckilltourId
            , String tourType
            , int productId
            , String tourStatus);

    /*
     * 制定旅游团（时间暂定传入String类型）
     * */
    @PostMapping("makeTourGroups")
    public Result makeTourGroups(int productId
            , String tourType
            , double tourPrice
            , int tourMaxNum
            , String startTime);
    /*
     * 制定秒杀游团（时间暂定传入String类型）
     * */
    @PostMapping("makeSeckillTourGroups")
    public Result makeSeckillTourGroups(int productId
            , String tourType
            , double tourPrice
            , int tourMaxNum
            , String startTime
            , String seckillStartTime
            , String seckillEndTime);
    /*
     * 确认开团（传入团id、操作[开团/取消团]），发送相应通知
     * 取消团，涉及退款
     * */
    @PostMapping("changeStatusTour")
    public Result changeStatusTour(int tourId, String operation);
    /*
     * 确认秒杀团（传入团id、操作[开团/取消团]），发送相应通知
     * 取消团，涉及退款
     * */
    @PostMapping("changeSeckillStatusTour")
    public Result changeSeckillStatusTour(int SeckillTourId, String operation);
    /*
     * 团退款服务:传入团id（5张表：用户账户详情表，平台账户详情表，平台账户表，订单表，用户订单详情表，用户退单详情表）
     *  tourGenre判断团类型（普通团/秒杀团）
     * */
    @PostMapping("refundTour")
    public Result refundTour(int tourId, String tourGenre);

    @GetMapping("sendHotTravel")
    public String sendHotTravel(String hotTravelMessage);

    @PostMapping("sendCardTimeMessage")
    public String sendCardTimeMessage();

    /*
     * 处理用户退款操作(userOrderId:录入订单id
     * ，travelerId:出行人id
     * ，money:退款金额
     * ，chargebackRemark:有责/无责)
     * */
    @PostMapping("userOrderDetailRefund")
    public Result userOrderDetailRefund(int userOrderId, int travelerId, double money, String chargebackRemark);

}
